package main

import "fmt"

// 定义接口~
type Usber interface {
	// 可不传参与返回值
	start() string
	stop()
}

// 如果接口有方法， 必须通过结构体或自定义类型实现

type Phone struct {
	Name string
}

// 实现接口  ==> 与其他语言一致，实现接口必须实现所有方法
func (p Phone) start() string {
	fmt.Println("name:", p.Name)
	return "success"
}
func (p Phone) stop() {
	fmt.Println("stop")
}

// 接口传递
type Computer struct{}

func (c Computer) start() string {
	return "success"
}
func (c Computer) stop() {
	fmt.Println("stop")
}
func (c Computer) work(usb Usber) {
	usb.start()
	usb.stop()
}

// 接口嵌套
type Phone2 struct {
	Name string
	Usber
}

func (p Phone2) start() string {
	fmt.Println("name:", p.Name)
	return "success"
}
func (p Phone2) stop() {
	fmt.Println("stop")
}
func main() {
	var c = Computer{}
	var p = Phone{"iphone"}
	// var res = p.start() // name: iphone
	// p.stop()            // stop
	// fmt.Println(res)    // success
	c.work(p) // name: iphone  \n stop
}
